package com.apimanage.monitor.util;

import com.apimanage.common.dto.ApiLogDTO;
import com.apimanage.monitor.entity.ApiLog;
import org.springframework.stereotype.Component;

/**
 * API日志转换工具类
 * 用于在ApiLogDTO和ApiLog实体类之间进行转换
 */
@Component
public class ApiLogConvertUtil {

    /**
     * 将ApiLogDTO转换为ApiLog实体类
     * @param apiLogDTO API日志DTO
     * @return API日志实体类
     */
    public static ApiLog convertToApiLog(ApiLogDTO apiLogDTO) {
        if (apiLogDTO == null) {
            return null;
        }

        ApiLog apiLog = new ApiLog();
        apiLog.setApiId(apiLogDTO.getApiId());
        apiLog.setUserId(apiLogDTO.getUserId());
        apiLog.setUserIp(apiLogDTO.getClientIp());

        // 设置请求参数（可以从请求体中提取）
        if (apiLogDTO.getRequestBody() != null && apiLogDTO.getRequestBody().length() > 1000) {
            // 限制请求参数长度，避免日志过大
            apiLog.setRequestParams(apiLogDTO.getRequestBody().substring(0, 1000) + "...");
        } else {
            apiLog.setRequestParams(apiLogDTO.getRequestBody());
        }

        // 设置响应结果（可以从响应体中提取）
        if (apiLogDTO.getResponseBody() != null && apiLogDTO.getResponseBody().length() > 1000) {
            // 限制响应结果长度，避免日志过大
            apiLog.setResponseResult(apiLogDTO.getResponseBody().substring(0, 1000) + "...");
        } else {
            apiLog.setResponseResult(apiLogDTO.getResponseBody());
        }

        apiLog.setCostTime(apiLogDTO.getCostTime());

        // 根据响应状态码设置调用状态
        if (apiLogDTO.getResponseStatus() != null && apiLogDTO.getResponseStatus() >= 200 && apiLogDTO.getResponseStatus() < 400) {
            apiLog.setStatus(1); // 成功
        } else {
            apiLog.setStatus(0); // 失败
        }

        apiLog.setCreateTime(apiLogDTO.getRequestTime());
        apiLog.setUpdateTime(apiLogDTO.getResponseTime());

        return apiLog;
    }

    /**
     * 将ApiLog实体类转换为ApiLogDTO
     * @param apiLog API日志实体类
     * @return API日志DTO
     */
    public static ApiLogDTO convertToApiLogDTO(ApiLog apiLog) {
        if (apiLog == null) {
            return null;
        }

        ApiLogDTO apiLogDTO = new ApiLogDTO();
        apiLogDTO.setApiId(apiLog.getApiId());
        apiLogDTO.setUserId(apiLog.getUserId());
        apiLogDTO.setClientIp(apiLog.getUserIp());
        apiLogDTO.setRequestBody(apiLog.getRequestParams());
        apiLogDTO.setResponseBody(apiLog.getResponseResult());
        apiLogDTO.setCostTime(apiLog.getCostTime());

        // 这里可以根据状态设置响应状态码
        if (apiLog.getStatus() == 1) {
            apiLogDTO.setResponseStatus(200);
        } else {
            apiLogDTO.setResponseStatus(500);
        }

        apiLogDTO.setRequestTime(apiLog.getCreateTime());
        apiLogDTO.setResponseTime(apiLog.getUpdateTime());

        return apiLogDTO;
    }
}